<?php

/**
 * Some Code Parts
 * 
 * Сборник кусков кода, которые или очень полезны, 
 * или часто нужны, но плохо запоминаются, или some_reason
 * 
 * @author Игорь Будасов aka Lord <igor.budasov@gmail.com>
 */
 
/*------------------------------------------------------------------------------*/

	/**
	* Синглтон, например
	*/

	class Singleton 
	{
		static private $instance = NULL;

		private function __construct() 
		{
		}

		static public function getInstance() 
		{
			if (self::$instance == NULL) 
			{
				self::$instance = new Singleton();
			}
			return self::$instance;
		}
	} 
	
/*------------------------------------------------------------------------------*/
	
	/**
	* Разрывает любые слова, длиннее указаного значения
	*/

	class Hw_Filter_TooLongWord implements Zend_Filter_Interface 
	{ 
		protected $_maxLength = 100; 
		 
		public function __construct($maxLength = 100) 
		{ 
			$this->_maxLength  = $maxLength; 
		} 
		 
		/** 
		 * 
		 * @param string $value 
		 * @return string 
		 */ 
		public function filter($value) 
		{ 
			$m = array(); 
			$r = preg_match_all("#(\w{".$this->_maxLength.",})#si", $value, $m, PREG_SET_ORDER); 
			if ($r) { 
				foreach ($m as $found) { 
					$split = str_split($found[1], $this->_maxLength); 
					$value = str_replace($found[1], implode(' ', $split), $value); 
				} 
			} 
			return $value; 
		} 
	}
/*------------------------------------------------------------------------------*/

	/**
	* проверка прав доступа
	*/

	$role = 'guest';
	if(isset($_SESSION['auth']))
	  $role = 'user';
	 
	$acl = new My_Acl();
	 
	if($acl->isAllowed($role, 'news', 'comment')) {
	  // код для вывод блока комментирования
	}

/*------------------------------------------------------------------------------*/
	
	//myrole получит привелегию dosomething ко всем ресурсам.
	$acl->allow('myrole', null, 'dosomething');
	
	//  myrole получит все возможные привилегии к someresource
	$acl->allow('myrole', 'someresource');

/*------------------------------------------------------------------------------*/

	/**
	* получение объекта вида
	*/

	// Получаем объект  Zend_Layout
	$layout = Zend_Layout::getMvcInstance();
	// Получаем объект  вида
	$view = $layout->getView();

/*------------------------------------------------------------------------------*/

/**
*  Приводим дату к формату Mysql
*/

if ($userData['date_birth'] != '') {
	$dateBirth = new Zend_Date($userData['date_birth'], 'dd.MM.yyyy');
	$userData['date_birth'] = $dateBirth->toString('yyyy-MM-dd');            
}
else {
	$userData['date_birth'] = null;
}

/*------------------------------------------------------------------------------*/

/**
* Вместо моего редактора можно юзать и вот такой редактор. 
* Для него, по ходу, костыли ставить не нужно
* По сути, все то же самое, что и для моего редактора,
* но наследование идет от Zend_Dojo_Form_Element_Editor
* 
* Факап детектед!
* Возвращает не значение, а массив. С ним не удобно работать
*/

$content = new Zend_Dojo_Form_Element_Editor('content', array(
	'label'       => $this->view->translate('page_content'),
	'description' => $this->view->translate('page_content_desc'),
	'rows'        => '15',
	'required'    => true, 
	'cols'        => '50',
	'validators'  => array(
		array('StringLength', true, array(0, 50000))
	 ),
	'filters'     => array('StringTrim'),
	'value'       => $data['content'] 
));

/*------------------------------------------------------------------------------*/

/**
* Формочка на DOJO
* Пока не нужна, но потом пригодится
*/

// кусок из контроллера
$form1 = new Zend_Dojo_Form();
$form1->setMethod('post')->setAction("/");
$form1->addElement('DateTextBox', 'date1', array(
	'label' => 'Choose a date:',
	'datePattern' => 'yyyy-MM-dd',
	'validators' => array('Date'),
	'required' => true
))
->addElement('TimeTextBox', 'time1', array(
	'label' => 'Choose a time:',
	'timePattern' => 'HH:mm:ss',
))
->addElement('NumberSpinner', 'number1', array(
	'label' => 'Choose a number:',
	'value' => 0,
	'smallDelta' => 1,
	'min' => 0,
	'max' => 30,
	'defaultTimeout' => 100,
	'timeoutChangeRate' => 100,
))
->addElement('HorizontalSlider', 'slide1', array(
	'label' => 'Let\'s slide:',
	'minimum' => 0,
	'maximum' => 25,
	'discreteValues' => 10,
	'style' => 'width: 450px;',
	'topDecorationDijit' => 'HorizontalRuleLabels',
	'topDecorationLabels' => array('0%','25%', '50%','75%', '100%'),
	'topDecorationParams' => array('style' => 'padding-bottom: 20px;'),
))
->addElement('SubmitButton', 'submit', array(
	'label' => 'Submit!'
	));

$this->view->form1 = $form1;

// кусок из вида
$this->dojo()->enable();
 
// Контейнер с табами
$this->tabContainer()->captureStart('tab1', array(), array('style' => 'width:600px;height:365px;'));
 
	// Таб "Dates"
	$this->contentPane()->captureStart('pane1', array(), array('title' => 'Dates'));
		echo $this->form1;
	echo $this->contentPane()->captureEnd('pane1');
 
	// Таб "FAQ"
	$this->contentPane()->captureStart('pane2', array(), array('title' => 'FAQ'));
		?>
		<h1>FAQ</h1>
		<dl><dt>Question 1?</dt><dd>This is my answer 1!</dd></dl>
		<dl><dt>Question 2?</dt><dd>Good question, next one.</dd></dl>
		<dl><dt>Question 3?</dt><dd>Ok, that's enough!</dd></dl>
		<?php
	echo $this->contentPane()->captureEnd('pane2');
 
	// Таб "Closable" (в настройках устанавливаем closable = true)
	$this->contentPane()->captureStart('pane3', array(), array('title' => 'Closable', 'closable' => true));
		echo 'You can close me!';
	echo $this->contentPane()->captureEnd('pane3');
 
	// Таб "Splitted" с разделителем
	$this->contentPane()->captureStart('pane4', array(), array('title' => 'Splitted'));
		$this->splitContainer()->captureStart('split1', array(), array('style' => 'width:250px;height:250px;'));
			$this->contentPane()->captureStart('splitpane1', array(), array());
				echo 'Hey, I am on the left side!';
			echo $this->contentPane()->captureEnd('splitpane1');
			$this->contentPane()->captureStart('splitpane2', array(), array());
				echo 'Cool!';
			echo $this->contentPane()->captureEnd('splitpane2');
		echo $this->splitContainer()->captureEnd('split1');
	echo $this->contentPane()->captureEnd('pane4');
 
	// Таб "Editor" с WYSIWYG редактором
	$this->contentPane()->captureStart('pane5', array(), array('title' => 'Editor'));
		echo $this->editor('foo');
	echo $this->contentPane()->captureEnd('pane5');
echo $this->tabContainer()->captureEnd('tab1');

/*------------------------------------------------------------------------------*/


?>
